if(!window.api){

    // 统一请求封装
class ApiService {
    constructor() {
        this.baseURL = window.location.origin;
        this.timeout = 10000;
        this.setupInterceptors();
    }

    // 设置拦截器
    setupInterceptors() {
        // 请求拦截器
        axios.interceptors.request.use(
            config => {
                // 添加 CSRF token
                const token = document.querySelector('meta[name="csrf-token"]');
                if (token) {
                    config.headers['X-CSRF-TOKEN'] = token.getAttribute('content');
                }
                
                // 添加认证头
                const authToken = localStorage.getItem('auth_token');
                if (authToken) {
                    config.headers['Authorization'] = `Bearer ${authToken}`;
                }
                
                // 设置默认配置
                config.timeout = this.timeout;
                config.baseURL = this.baseURL;
                
                return config;
            },
            error => {
                return Promise.reject(error);
            }
        );

        // 响应拦截器
        axios.interceptors.response.use(
            response => {
                // 统一处理响应数据
                const { data } = response;
                // 如果后端返回的是标准格式 {status: 'success', data: {...}, message: '...'}
                if (data && typeof data === 'object') {
                    return data;
                }
                
                return response;
            },
            error => {
                // 统一错误处理
                let message = '请求失败';
                
                if (error.response) {
                    const { status, data } = error.response;
                    
                    switch (status) {
                        case 401:
                            message = '未授权，请重新登录';
                            // 可以在这里跳转到登录页
                            // window.location.href = '/login';
                            break;
                        case 403:
                            message = '拒绝访问';
                            break;
                        case 404:
                            message = '请求地址不存在';
                            break;
                        case 422:
                            message = data.message || '数据验证失败';
                            break;
                        case 500:
                            message = '服务器内部错误';
                            break;
                        default:
                            message = data.message || `请求失败 (${status})`;
                    }
                } else if (error.request) {
                    message = '网络连接失败';
                } else {
                    message = error.message || '请求配置错误';
                }
                
                // 显示错误消息
                if (window.Vue && window.Vue.prototype.$message) {
                    window.Vue.prototype.$message.error(message);
                } else {
                    console.error('API Error:', message);
                }
                
                return Promise.reject(error);
            }
        );
    }

    // GET 请求
    get(url, params = {}, config = {}) {
        return axios.get(url, {
            params,
            ...config
        });
    }

    // POST 请求
    post(url, data = {}, config = {}) {
        return axios.post(url, data, config);
    }

    // PUT 请求
    put(url, data = {}, config = {}) {
        return axios.put(url, data, config);
    }

    // DELETE 请求
    delete(url, config = {}) {
        return axios.delete(url, config);
    }

    // 上传文件
    upload(url, formData, config = {}) {
        return axios.post(url, formData, {
            headers: {
                'Content-Type': 'multipart/form-data'
            },
            ...config
        });
    }

    // 下载文件
    download(url, params = {}, filename = '') {
        return axios.get(url, {
            params,
            responseType: 'blob'
        }).then(response => {
            const blob = new Blob([response.data]);
            const downloadUrl = window.URL.createObjectURL(blob);
            const link = document.createElement('a');
            link.href = downloadUrl;
            link.download = filename || 'download';
            document.body.appendChild(link);
            link.click();
            document.body.removeChild(link);
            window.URL.revokeObjectURL(downloadUrl);
        });
    }
}

// 创建实例
const api = new ApiService();

// 导出给全局使用
window.api = api;
}


// 如果使用模块化，也可以这样导出
// export default api;
